package com.hyt.it.ogt.ykcj.service.exam;

import com.hyt.it.ogt.ykcj.common.core.domain.entity.SysDictData;
import com.hyt.it.ogt.ykcj.domain.exam.ExamInfo;
import com.hyt.it.ogt.ykcj.domain.param.*;
import com.hyt.it.ogt.ykcj.domain.vo.*;

import java.util.List;

/**
 * 考试信息Service接口
 *
 * @author admin
 * @date 2021-06-18
 */
public interface IExamInfoService {
    /**
     * 查询考试信息
     *
     * @param id 考试信息ID
     * @return 考试信息
     * @throws Exception
     */
    public ExamInfoVo selectExamInfoById(String id) throws Exception;

    /**
     * 查询考试信息列表
     *
     * @param examInfo 考试信息
     * @return 考试信息集合
     */
    List<ExamInfo> selectExamInfoList(ExamInfo examInfo);

    /**
     * 根据考试名称Id查询最近一次考试信息并返回
     *
     * @param @param  examNameConfigId
     * @param @return
     */
    public ExamInfoVo selectExamInfoByExamNameId(String examNameConfigId, String year) throws Exception;


    /**
     * 根据考试名称ID查询考试类型
     *
     * @param examNameConfigId 考试名称ID
     * @return
     */
    List<SysDictData> getExamType(String examNameConfigId);

    /**
     * 查询考试ID
     *
     * @param examNameConfigId 考试名称ID
     * @param civilServantType 公务员考试类别
     * @param year             考试年份
     * @return
     */
    String getExamId(String examNameConfigId, String civilServantType, String year);

    /**
     * 企业招聘考试列表查询
     *
     * @param examPageParam
     * @return
     */
    List<EnterpriseExamVo> pageEnterpriseExamInfoList(ExamPageParam examPageParam);

    /**
     * 合并考试待选列表查询
     *
     * @param examPageParam
     * @return
     */
    List<EnterpriseExamVo> pageEnterpriseExamInfoSelectList(ExamPageParam examPageParam);

    /**
     * 其他考试列表查询
     *
     * @param examPageParam
     * @return
     */
    List<ExamInfoVo> pageOtherExamInfoList(ExamPageParam examPageParam);

    /**
     * 分页数据组装
     *
     * @return
     */
    List<OtherExamVo> pageOtherExamInfoListExchange(List<ExamInfoVo> list);

    /**
     * 新增企业招聘考试
     *
     * @param enterpriseExamSaveParam
     */
    void insertEnterpriseExamInfo(EnterpriseExamSaveParam enterpriseExamSaveParam);

    /**
     * 保存科目
     *
     * @param enterpriseExamSaveParam
     */
    void insertSubjectInfo(EnterpriseExamSaveParam enterpriseExamSaveParam);

    /**
     * 删除企业招聘考试
     *
     * @param ids
     * @return
     */
    void deleteEnterpriseExamInfoByIds(String ids);

    /**
     * 企业招聘考试详情
     *
     * @param id
     * @return
     */
    EnterpriseExamSaveParam enterpriseExamDetail(String id);

    /**
     * 根据考试科目id查询科目详情
     *
     * @param subjectId
     * @return
     */
    EnterpriseSubjectParam enterpriseExamSubjectDetail(String subjectId);

    /**
     * 其他考试修改考试类型（当前只支持修改成企业招聘考试）
     *
     * @param examTypeChangeParam
     */
    void examTypeChange(ExamTypeChangeParam examTypeChangeParam);


    /**
     * 根据考试类型查询考试合格状态
     *
     * @param examId （考试id）
     * @return
     */
    ExamQualifiedStatusVo getExamQualifiedStatus(String examId, String subjectId);


    /**
     * 查询考试信息
     *
     * @param officeId
     * @return
     */
    List<ExamInfoExternalVo> getExamInfoExternalVosByOfficeId(String officeId, Integer bindingStatus, String examName);


    /**
     * 查询成绩信息
     *
     * @param examIds
     * @return
     */
    List<ExamInfoExternalVo> getExamInfoExternalVosByExamIds(List<String> examIds);


    /**
     * 查询考试信息
     *
     * @param id
     * @return
     */
    ExamInfo selectExamById(String id);

    /**
     * 根据考试类型查询考试名称
     *
     * @param examNameQueryParam （0:专业资格考试 1:公务员考试）
     * @return
     */
    List<ExamConfigNameVo> getExamNameList(ExamNameQueryParam examNameQueryParam);

    /**
     * 合并考试
     *
     * @param examMergeParam
     */
    void examMerge(ExamMergeParam examMergeParam);

    /**
     * 获得考试组下的子考试
     *
     * @param examId
     * @return
     */
    List<ExamInfoVo> getSubExamList(String examId);

    /**
     * 获取考试形式
     *
     * @return
     */
    List<ExamFormVo> getExamForms();

    /**
     * 修改考试信息
     *
     * @param examInfo 考试信息
     * @return 结果
     */
    public int updateExamInfo(ExamInfo examInfo);

    /**
     * 考试详情
     *
     * @param id
     * @return
     */
    ExamInfo examDetail(String id);

    /**
     * 已选考试
     *
     * @param examId
     */
    List<EnterpriseExamVo> pageEnterpriseExamInfoSelectedList(String examId);

    /**
     * 合并考试明细
     *
     * @param examId
     * @return
     */
    MergeExamDetailVo mergeExamDetail(String examId);

    /**
     * 解除关系
     *
     * @param id
     */
    void relationRemove(String id);

    ExamInfoVo selectExamInfoByExamId(String examId);

    /**
     * 根据考试获取考试绑定的证书列表
     *
     * @param examId
     * @return
     */
    List<ExamCertificateVo> getCertificateList(String examId);

    /**
     * 查询考试信息通过批次ID
     *
     * @param timeId
     * @return
     */
    List<ExamInfo> listByTaskId(String timeId);

    /**
     * 删除考试信息数据
     *
     * @param examInfoId
     */
    void deleteExamInfo(String examInfoId);
}
